import datetime
import os.path
import sys
import inspect
from selenium import webdriver
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from selenium.webdriver.edge.service import Service

#获取调用函数的名字
def get_caller_name():
    # 获取当前栈帧的上一层（即调用者）
    stack = inspect.stack()
    frame = stack[2]  # 索引 1 表示调用者的帧
    return frame.function  # 返回调用者的函数名

class Driver:
    driver = ''

    #构造函数
    def __init__(self):
        #这是 Selenium 提供的一个类，专门用于创建 Edge 浏览器的配置对象。
        options = webdriver.EdgeOptions()
        #安装Edge浏览器驱动
        edge = EdgeChromiumDriverManager().install()
        #创通过Edge浏览器驱动，打开Edge浏览器的首页
        self.driver = webdriver.Edge(service=Service(edge), options=options)
        #添加一个隐式等待，预防代码执行速度比页面渲染加载快，报错
        self.driver.implicitly_wait(2)
    #截屏函数
    def GetScreeShot(self):
        # 首先在上一级路径创建一个文件夹，命名为：images+当天的年月日
        # 创建之前先看一下，文件夹是否存在
        #获取当前时，将其转化为“%Y-%m-%d”这种字符串类型的格式
        dirname=datetime.datetime.now().strftime("%Y-%m-%d")
        #判断当前文件夹是否存在，不存在则创建
        if not os.path.exists("../images/"+dirname):
            os.mkdir("../images/"+dirname)
        # 截图的图片名称要加上调用是哪个函数调用这个截图函数的
        # 图片名称：BlogLoginTest-2025-3-23-123409
        filename = get_caller_name() + "-" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S") + ".png"
        # 利用驱动对象调用截图函数，将图片放入文件中
        self.driver.save_screenshot("../images/" + dirname + "/" + filename)#文件的相对路径

#使用Driver类创建一个类驱动对象，其他函数想要使用这个驱动就得使用BlogDriver调用里面的驱动成员driver
BlogDriver = Driver()